package core.interfaces;

import java.io.Serializable;
import java.util.List;

import core.algorithms.SearchParameters;
import core.algorithms.SearchResults;

public interface ISearchAlgorithm<T> extends Serializable
{
	public String getAlgorithmName();
	public SearchParameters<T> getSearchParameters();
	public SearchResults<T> start();
//	public IState<T> getFinalState();
//	public double getFinalResult();
	public boolean isFinished();
	public void addProgressListener(IProgressListener progressListener);
	public List<IProgressListener> getProgressListeners();
	public void setProgressListeners(List<IProgressListener> listeners);
	public SearchResults<T> getSearchResults();
	public void initAlgorithm(SearchParameters<T> searchParameters);
	
	public ISearchAlgorithm<T> clone();
}
